//
//  GAKKIBaseTableViewController.h
//  GANGAIKit
//
//  Created by fh on 2019/11/6.
//  Copyright © 2019 cashchina. All rights reserved.
//

#import "GAKKIBaseViewController.h"
#import "GAKKIBaseTableViewCell.h"
#import "GAKKIBaseTableViewHeaderFooterView.h"
#import "GAKKIBaseRefreshHeader.h"
#import "GAKKIBaseRefreshFooter.h"

NS_ASSUME_NONNULL_BEGIN

/// 列表控制器基类:包含tableView的控制器都可以使用该类
@interface GAKKIBaseTableViewController : GAKKIBaseViewController <UITableViewDelegate,UITableViewDataSource>

/// 列表控件
@property (nonatomic, readonly, strong) UITableView *tableView;

/// 列表控件样式:默认UITableViewStylePlain
@property (nonatomic, readonly, assign) UITableViewStyle tableViewStyle;
/// cell分割线样式:默认UITableViewCellSeparatorStyleSingleLine
@property (nonatomic) UITableViewCellSeparatorStyle cellSeparatorStyle;
/// 是否补齐分割线,默认NO
@property (nonatomic, readwrite, assign) BOOL shouldFixCellSeparator;
/// 分区头是否可用:默认NO
@property (nonatomic, readwrite, assign, getter=isSectionHeaderViewAvailable) BOOL sectionHeaderViewAvailable;
/// 分区尾是否可用:默认NO
@property (nonatomic, readwrite, assign, getter=isSectionFooterViewAvailable) BOOL sectionFooterViewAvailable;

/// 数据源
@property (nonatomic, readwrite, strong) NSMutableArray *dataSource;
/// 是否数据是多段:默认NO
@property (nonatomic, readwrite, assign) BOOL shouldMultiSections;

/// 是否有数据 
@property (nonatomic, readonly, assign, getter=isHadData) BOOL hadData;

/// 创建对象
+ (instancetype)new;

/// 初始化
- (instancetype)init;

/// 用传递参数初始化
/// @param params 传递参数
- (instancetype)initWithParams:(NSDictionary * __nullable)params;

/// 初始化控制器
/// @param style 列表控件样式
- (instancetype)initWithStyle:(UITableViewStyle)style;

/// 初始化控制器
/// @param style 表格视图样式
/// @param params 参数
- (instancetype)initWithStyle:(UITableViewStyle)style params:(NSDictionary * __nullable)params;

/// 初始化控制器
/// @param style 表格视图样式
/// @param params 参数
/// @param settingBlock 自定义配置回调
- (instancetype)initWithStyle:(UITableViewStyle)style params:(NSDictionary * __nullable)params settingBlock:(void(^ __nullable)(GAKKIBaseTableViewController *vc))settingBlock;

/// 配置子视图:默认添加tableView并设置frame(已适配iPhoneX和iOS11),子类可以重写,重写必须自己添加tableView到父视图并设置frame : 重写父类方法
- (void)setupView;

/// 刷新数据
- (void)reloadData;

@end

NS_ASSUME_NONNULL_END

// 刷新功能
#import "GAKKIBaseTableViewController+Refresh.h"
// 空数据功能
#import "GAKKIBaseTableViewController+EmptyData.h"


